<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>优先级队列</title>
	</head>
	<body>
	</body>
</html>
<script type="text/javascript">
	// ---------------------优先级队列------------------------------------------------
	// 每个元素不再只是一个数据,而且包含数据的优先级
	// 在添加方式中，根据优先级放入正确的位置
	// 

	function PriortyQueue() {
		// 重新创建一个内部类
		function QueueElement(element,priority){
			this.element = element
			this.priority = priority
		}
		// 封装属性
		this.items=[]
		
		// 实现插入方法
		PriortyQueue.prototype.enqueue= function(element,priority){
			// 1.创建QueueElement 对象
			var queueElement = new QueueElement(element,priority)
			// 2.判断队列是否为空
			if(this.items.length == 0){
				this.items.push(queueElement)
			}else{
				var add =false
				for (var i = 0; i < this.items.length; i++) {
					if(queueElement.priority < this.items[i].priority){
						this.items.splice(i,0,queueElement)
						add= true
						break
					}
				}
				if(!add){
					this.items.push(queueElement)
				}
			}
		}
		// 2.从队列中删除当前元素
		PriortyQueue.prototype.dequeue = function(){
			return this.items.shift()
		}
		// 3.查看前端的元素
		PriortyQueue.prototype.front = function(){
			return this.items[0]
		}
		// 4.查看队列是否为空
		PriortyQueue.prototype.isEmpty = function(){
			return this.items.length ==0
		}
		// 5.查看队列中元素的个数
		PriortyQueue.prototype.size = function(){
			return this.items.length
		}
		// 6.toString方法
		PriortyQueue.prototype.toString = function(){
			// return this.items.join(',')
			var toJson=''
			for (var i = 0; i < this.items.length; i++) {
				toJson=toJson+this.items[i].element + '-' + this.items[i].priority
			}
			return toJson
		}
		
	}

	// 测试代码
	var pq = new PriortyQueue()
	
	pq.enqueue('adc',111)
	pq.enqueue('dce',11)
	pq.enqueue('efg',50)
	alert(pq.toString())
</script>
